package com.meng.jwt.controller;

import com.meng.jwt.Dto.UserTokenDTO;
import com.meng.jwt.model.User;
import com.meng.jwt.utils.JWTUtil;
import org.springframework.web.bind.annotation.*;

import redis.clients.jedis.JedisPool;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * @author xinqimeng
 * @version 1.0.0
 * @ClassName UserController.java
 * @Description TODO
 * @createTime 2022年10月26日 14:36:00
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private JedisPool jedisPool;

    @PostMapping("/login")
    public String login() {
        User user = new User();
        user.setPassword("xinqimeng");
        user.setUsername("111");
        //1.判断用户名密码是否正确
        //2.用户名密码正确生成token
        UserTokenDTO userTokenDTO = new UserTokenDTO();
        userTokenDTO.setId(user.getUsername());
        userTokenDTO.setGmtCreate(System.currentTimeMillis());
        String token = JWTUtil.generateToken(userTokenDTO);

        //3.存入token至redis
        jedisPool.getResource().set(userTokenDTO.getId(), token);
        jedisPool.getResource().close();
        return token;
    }
    @GetMapping("/api")
    public String api(HttpServletRequest request) {
        // 从请求头中拿到token
        String authorization = request.getHeader("Authorization");
        if (JWTUtil.parseToken(authorization) != null) {
            return "调用成功!";
        }
        return "请先登录!";
    }

    @GetMapping("/logout")
    public boolean loginOut(String id) {
        Long del = jedisPool.getResource().del(id);
        jedisPool.getResource().close();
        if (del != 1){
            return false;
        }
        return true;
    }
//    @GetMapping("/updatePassword")
//    public String updatePassword(User updatePasswordUserVO) {
//        //1.修改密码
//        UserPO userPO = UserPO.builder().password(updatePasswordUserVO.getPassword())
//                .id(updatePasswordUserVO.getId())
//                .build();
//        UserPO user = userMapper.getById(updatePasswordUserVO.getId());
//        if (user == null) {
//            throw new UserException(ErrorCodeEnum.TNP1001001);
//        }
//
//        if (userMapper.updatePassword(userPO) != 1) {
//            throw new UserException(ErrorCodeEnum.TNP1001005);
//        }
//        //2.生成新的token
//        UserTokenDTO userTokenDTO = UserTokenDTO.builder()
//                .id(updatePasswordUserVO.getId())
//                .username(user.getUsername())
//                .gmtCreate(System.currentTimeMillis()).build();
//        String token = JWTUtil.generateToken(userTokenDTO);
//        //3.更新token
//        redisService.set(user.getId(), token);
//        return token;
//    }
}
